home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 32 / five.zip / COMPUTER.PAS next >
Pascal/Delphi Source File  |  1987-03-14  |  58KB  |  1,240 lines

  1.      function Computer_player(Var New_Cup: Dice):boolean;
  2.  
  3.          Type Type_of_score = (straight,three_pairs,
  4.                                         three_of_a_kind,second_three,
  5.                                                                aces,fives);
  6.               Scores = record
  7.                             Points:         real;
  8.                             Dice_used:      array[1..6] of boolean;
  9.                          end;
  10.  
  11.  
  12.          Var Talley:              array[1..6] of integer;
  13.              Number:              array[1..6] of integer;
  14.              Dice_that_score:     array[1..6] of boolean;
  15.              Potential_score:     array[straight..fives] of Scores;
  16.              Kind:                Type_of_score;
  17.              Cup:                 Dice;
  18.              All_used:            boolean;
  19.              Num_of_scores:       integer;
  20.              Count:               integer;
  21.              I,J,K:               integer;
  22.              Pulled_score:        real;
  23.  
  24.          procedure Display_diagnostics(Special_case:real);
  25.  
  26.               Var I:     integer;
  27.                   kind:  Type_of_score;
  28.  
  29.               begin
  30.               window(36,2,78,24);
  31.               clrscr;
  32.               writeln(Special_case:6:0);
  33.               writeln;
  34.               write('Cup[I].Saved: ');
  35.               for I:= 1 to 6 do
  36.                    if Cup[I].Saved
  37.                         then
  38.                            write(I:1,', ');
  39.               writeln;
  40.               writeln;
  41.               write('Talley: ');
  42.               for I:= 1 to 6 do
  43.                    write(I:1,'= ',Talley[I]:1,', ');
  44.               writeln;
  45.               writeln;
  46.               write('Number: ');
  47.               for I:= 1 to 6 do
  48.                    write(I:1,'=',Number[I]:1,', ');
  49.               writeln;
  50.               writeln;
  51.               for kind:= straight to fives do
  52.                    begin
  53.                    case kind of
  54.                         straight: write('Straight:    ');
  55.                      three_pairs: write('3 Pairs:     ');
  56.                  three_of_a_kind: write('3 of a kind: ');
  57.                     second_three: write('Second 3:    ');
  58.                             aces: write('Aces:        ');
  59.                            fives: write('Fives:       ');
  60.                         end;
  61.                    with Potential_score[kind] do
  62.                         begin
  63.                         write(Points:5:0,'  ');
  64.                         for I:= 1 to 6 do
  65.                              if Dice_used[I]
  66.                                   then
  67.                                      write(I:1,', ');
  68.                         writeln;
  69.                         end;
  70.                    end;
  71.               write('Dice_that_score: ');
  72.               for I:= 1 to 6 do
  73.                    if Dice_that_score[I]
  74.                         then
  75.                            write(I:1,', ');
  76.               writeln;
  77.               writeln('Count:  ',Count:1);
  78.               writeln('Number of Scoring Dice = ',Num_of_scores:1);
  79.               writeln;
  80.               write('Cup[I].Marked:  ');
  81.               for I:= 1 to 6 do
  82.                    if Cup[I].Marked
  83.                         then
  84.                            write(I:1,', ');
  85.               writeln;
  86.               writeln;
  87.               write('Cup[I].Pulled:  ');
  88.               for I:= 1 to 6 do
  89.                    if Cup[I].Pulled
  90.                         then
  91.                            write(I:1,', ');
  92.               writeln;
  93.               repeat until keypressed;
  94.               window(2,2,34,24);
  95.               end;
  96.  
  97.          Procedure Take_them;
  98.  
  99.               Var I:    integer;
  100.  
  101.               begin
  102.               for I:= 1 to 6 do
  103.                    if (not Cup[I].Saved) and Dice_that_score[I]
  104.                         then
  105.                            Cup[I].Pulled:= True;
  106.               end;
  107.  
  108.  
  109.          Procedure Take_aces(How_many: integer);
  110.  
  111.               Var I:              integer;
  112.                   Pulled_dice:    integer;
  113.  
  114.               begin
  115.               Pulled_dice:= 0;
  116.               for I:= 1 to 6 do
  117.                    if (Cup[I].Value = 1) and (How_many > 0) and
  118.                          (not Cup[I].Saved) and (not Cup[I].Pulled)
  119.                         then
  120.                            begin
  121.                            Pulled_dice:= Pulled_dice + 1;
  122.                            How_many:= How_many - 1;
  123.                            Cup[I].Pulled:= True;
  124.                            Cup[I].Marked:= True;
  125.                            end;
  126.               Pulled_score:= Pulled_score + 100 * Pulled_dice;
  127.               end;
  128.  
  129.          Procedure Take_fives(How_many: integer);
  130.  
  131.               Var I:              integer;
  132.                   Pulled_dice:    integer;
  133.  
  134.               begin
  135.               Pulled_dice:= 0;
  136.               for I:= 1 to 6 do
  137.                    if (Cup[I].Value = 5) and (How_many > 0) and
  138.                          (not Cup[I].Saved) and (not Cup[I].Pulled)
  139.                         then
  140.                            begin
  141.                            Pulled_dice:= Pulled_dice + 1;
  142.                            How_many:= How_many - 1;
  143.                            Cup[I].Pulled:= True;
  144.                            Cup[I].Marked:= True;
  145.                            end;
  146.               Pulled_score:= Pulled_score + 50 * Pulled_dice;
  147.               end;
  148.  
  149.          Function Comp1: boolean;
  150.  
  151.  
  152.               begin
  153.               Pulled_score:= 0.0;
  154.               if Points_available < Needed
  155.                    then
  156.                       begin
  157.                       if Potential_score[three_of_a_kind].Points >= 300.0
  158.                            then
  159.                               begin
  160.                               Pulled_score:= Pulled_score +
  161.                                        Potential_score[three_of_a_kind].Points;
  162.                               for I:= 1 to 6 do
  163.                                    Cup[I].Pulled:=
  164.                                         Potential_score
  165.                                              [three_of_a_kind].Dice_used[I];
  166.                               end
  167.                            else
  168.                               if (Potential_score[aces].Points < 100.0) and
  169.                                  (Potential_score[fives].Points < 50.0) and
  170.                                  (Potential_score[three_of_a_kind].Points > 0)
  171.                                    then
  172.                                       begin
  173.                                       Pulled_score:= Pulled_score +
  174.                                        Potential_score[three_of_a_kind].Points;
  175.                                       for I:= 1 to 6 do
  176.                                            Cup[I].Pulled:=
  177.                                                 Potential_score
  178.                                                 [three_of_a_kind].Dice_used[I];
  179.                                       end
  180.                                    else
  181.                                       if Potential_score[aces].Points >= 100.0
  182.                                            then
  183.                                               Take_aces(1)
  184.                                            else
  185.                                               Take_fives(1);
  186.                       if Num_of_scores = Count
  187.                            then
  188.                               begin
  189.                               Take_them;
  190.                               Comp1:= False;
  191.                               end;
  192.                       Comp1:= False;
  193.                       if (Pulled_score + Points_available >= Needed) and
  194.                          (not Score[Current_player].On_board) and not
  195.                          (Num_of_scores = Count)
  196.                            then
  197.                               begin
  198.                               Take_them;
  199.                               Comp1:= True;
  200.                               end;
  201.                       Count:= 6;
  202.                       for I:= 1 to 6 do
  203.                            if (Cup[I].Saved) or (Cup[I].Pulled)
  204.                                 then
  205.                                    Count:= Count - 1;
  206.                       if (Pulled_score + Points_available >= Needed) and
  207.                          (Score[Current_player].On_board) and (Count <= 2)
  208.                          and not (Count = 0)
  209.                            then
  210.                               begin
  211.                               Take_them;
  212.                               Comp1:= True;
  213.                               end;
  214.                       end;
  215.  
  216.               if (Points_available >= Needed) and
  217.                              (not Score[Current_player].On_board)
  218.                    then
  219.                       case Count of
  220.                            1: begin
  221.                               Take_them;
  222.                               Comp1:= False;
  223.                               end;
  224.                            2: case Num_of_scores of
  225.                                    1: begin
  226.                                       Take_them;
  227.                                       Comp1:= True;
  228.                                       end;
  229.                                    2: begin
  230.                                       Take_them;
  231.                                       Comp1:= False;
  232.                                       end;
  233.                                 end;
  234.                            3: case Num_of_scores of
  235.                                    1: begin
  236.                                       Take_them;
  237.                                       Comp1:= True;
  238.                                       end;
  239.                                    2: begin
  240.                                       Take_them;
  241.                                       Comp1:= True;
  242.                                       end;
  243.                                    3: begin
  244.                                       Take_them;
  245.                                       Comp1:= False;
  246.                                       end;
  247.                                 end;
  248.                            4: case Num_of_scores of
  249.                                    1: begin
  250.                                       Take_them;
  251.                                       Comp1:= True;
  252.                                       end;
  253.                                  2,3: begin
  254.                                       Take_them;
  255.                                       Comp1:= True;
  256.                                       end;
  257.                                    4: begin
  258.                                       Take_them;
  259.                                       Comp1:= False;
  260.                                       end;
  261.                                 end;
  262.                            5: case Num_of_scores of
  263.                                    1: begin
  264.                                       Take_them;
  265.                                       Comp1:= false;
  266.                                       end;
  267.                                    2: begin
  268.                                       Take_them;
  269.                                       Comp1:= True;
  270.                                       end;
  271.                                  3,4: begin
  272.                                       Take_them;
  273.                                       Comp1:= True;
  274.                                       end;
  275.                                    5: begin
  276.                                       Take_them;
  277.                                       Comp1:= False;
  278.                                       end;
  279.                                 end;
  280.                            6: case Num_of_scores of
  281.                                    1: begin
  282.                                       Take_them;
  283.                                       Comp1:= false;
  284.                                       end;
  285.                                    2: begin
  286.                                       Take_them;
  287.                                       Comp1:= True;
  288.                                       end;
  289.                                3,4,5: begin
  290.                                       Take_them;
  291.                                       Comp1:= True;
  292.                                       end;
  293.                                    6: begin
  294.                                       Take_them;
  295.                                       Comp1:= False;
  296.                                       end;
  297.                                 end;
  298.  
  299.                         end;
  300.               if (Points_available >= Needed) and
  301.                              (Score[Current_player].On_board)
  302.                    then
  303.                       case Count of
  304.                            1: begin
  305.                               Take_them;
  306.                               Comp1:= False;
  307.                               end;
  308.                            2: case Num_of_scores of
  309.                                    1: begin
  310.                                       Take_them;
  311.                                       Comp1:= True;
  312.                                       end;
  313.                                    2: begin
  314.                                       Take_them;
  315.                                       Comp1:= False;
  316.                                       end;
  317.                                 end;
  318.                            3: case Num_of_scores of
  319.                                    1: begin
  320.                                       Take_them;
  321.                                       Comp1:= True;
  322.                                       end;
  323.                                    2: begin
  324.                                       Take_them;
  325.                                       Comp1:= True;
  326.                                       end;
  327.                                    3: begin
  328.                                       Take_them;
  329.                                       Comp1:= False;
  330.                                       end;
  331.                                 end;
  332.                            4: case Num_of_scores of
  333.                                    1: begin
  334.                                       Take_them;
  335.                                       Comp1:= False;
  336.                                       end;
  337.                                  2,3: begin
  338.                                       Take_them;
  339.                                       Comp1:= True;
  340.                                       end;
  341.                                    4: begin
  342.                                       Take_them;
  343.                                       Comp1:= False;
  344.                                       end;
  345.                                 end;
  346.                            5: case Num_of_scores of
  347.                                    1: begin
  348.                                       Take_them;
  349.                                       Comp1:= false;
  350.                                       end;
  351.                                    2: begin
  352.                                       Take_them;
  353.                                       Comp1:= false;
  354.                                       end;
  355.                                  3,4: begin
  356.                                       Take_them;
  357.                                       Comp1:= True;
  358.                                       end;
  359.                                    5: begin
  360.                                       Take_them;
  361.                                       Comp1:= False;
  362.                                       end;
  363.                                 end;
  364.                            6: case Num_of_scores of
  365.                                    1: begin
  366.                                       Take_them;
  367.                                       Comp1:= false;
  368.                                       end;
  369.                                  2,3: begin
  370.                                       Take_them;
  371.                                       Comp1:= False;
  372.                                       end;
  373.                                  4,5: begin
  374.                                       Take_them;
  375.                                       Comp1:= True;
  376.                                       end;
  377.                                    6: begin
  378.                                       Take_them;
  379.                                       Comp1:= False;
  380.                                       end;
  381.                                 end;
  382.  
  383.                         end;
  384.               end;
  385.  
  386.          function Comp2(Var Cup: Dice): boolean;
  387.  
  388.               Var Closest:        real;
  389.                   Now_available:  real;
  390.  
  391.               begin
  392.               Pulled_score:= 0.0;
  393.               if Points_available < Needed
  394.                    then
  395.                       begin
  396.                       if Potential_score[three_of_a_kind].Points >= 300.0
  397.                            then
  398.                               begin
  399.                               Pulled_score:= Pulled_score +
  400.                                        Potential_score[three_of_a_kind].Points;
  401.                               for I:= 1 to 6 do
  402.                                    Cup[I].Pulled:=
  403.                                         Potential_score
  404.                                              [three_of_a_kind].Dice_used[I];
  405.                               end
  406.                            else
  407.                               if (Potential_score[aces].Points < 100.0) and
  408.                                  (Potential_score[fives].Points < 50.0) and
  409.                                  (Potential_score[three_of_a_kind].Points > 0)
  410.                                    then
  411.                                       begin
  412.                                       Pulled_score:= Pulled_score +
  413.                                        Potential_score[three_of_a_kind].Points;
  414.                                       for I:= 1 to 6 do
  415.                                            Cup[I].Pulled:=
  416.                                                 Potential_score
  417.                                                 [three_of_a_kind].Dice_used[I];
  418.                                       end
  419.                                    else
  420.                                       if Potential_score[aces].Points >= 100.0
  421.                                            then
  422.                                               Take_aces(1)
  423.                                            else
  424.                                               Take_fives(1);
  425.                       if Num_of_scores = Count
  426.                            then
  427.                               begin
  428.                               Take_them;
  429.                               Comp2:= False;
  430.                               end;
  431.                       Comp2:= False;
  432.                       if Problems then Display_diagnostics(Pulled_score);
  433.                       if (Pulled_score + Points_available >= Needed) and
  434.                          (not Score[Current_player].On_board) and not
  435.                          (Num_of_scores = Count)
  436.                            then
  437.                               begin
  438.                               Take_them;
  439.                               Comp2:= True;
  440.                               end;
  441.                       Count:= 6;
  442.                       for I:= 1 to 6 do
  443.                            if (Cup[I].Saved) or (Cup[I].Pulled)
  444.                                 then
  445.                                    Count:= Count - 1;
  446.                       if (Pulled_score + Points_available >= Needed) and
  447.                          (Score[Current_player].On_board) and (Count <= 2)
  448.                          and not (Count = 0)
  449.                            then
  450.                               begin
  451.                               Take_them;
  452.                               Comp2:= True;
  453.                               end;
  454.                       end;
  455.  
  456.               if (Points_available >= Needed) and
  457.                              (not Score[Current_player].On_board)
  458.                    then
  459.                       case Count of
  460.                            1: begin
  461.                               Take_them;
  462.                               Comp2:= False;
  463.                               end;
  464.                            2: case Num_of_scores of
  465.                                    1: begin
  466.                                       Take_them;
  467.                                       Comp2:= True;
  468.                                       end;
  469.                                    2: begin
  470.                                       Take_them;
  471.                                       Comp2:= False;
  472.                                       end;
  473.                                 end;
  474.                            3: case Num_of_scores of
  475.                                    1: begin
  476.                                       Take_them;
  477.                                       Comp2:= True;
  478.                                       end;
  479.                                    2: begin
  480.                                       Take_them;
  481.                                       Comp2:= True;
  482.                                       end;
  483.                                    3: begin
  484.                                       Take_them;
  485.                                       Comp2:= False;
  486.                                       end;
  487.                                 end;
  488.                            4: case Num_of_scores of
  489.                                    1: begin
  490.                                       Take_them;
  491.                                       Comp2:= True;
  492.                                       end;
  493.                                  2,3: begin
  494.                                       Take_them;
  495.                                       Comp2:= True;
  496.                                       end;
  497.                                    4: begin
  498.                                       Take_them;
  499.                                       Comp2:= False;
  500.                                       end;
  501.                                 end;
  502.                            5: case Num_of_scores of
  503.                                    1: begin
  504.                                       Take_them;
  505.                                       Comp2:= false;
  506.                                       end;
  507.                                    2: begin
  508.                                       Take_them;
  509.                                       Comp2:= True;
  510.                                       end;
  511.                                  3,4: begin
  512.                                       Take_them;
  513.                                       Comp2:= True;
  514.                                       end;
  515.                                    5: begin
  516.                                       Take_them;
  517.                                       Comp2:= False;
  518.                                       end;
  519.                                 end;
  520.                            6: case Num_of_scores of
  521.                                    1: begin
  522.                                       Take_them;
  523.                                       Comp2:= false;
  524.                                       end;
  525.                                    2: begin
  526.                                       Take_them;
  527.                                       Comp2:= True;
  528.                                       end;
  529.                                3,4,5: begin
  530.                                       Take_them;
  531.                                       Comp2:= True;
  532.                                       end;
  533.                                    6: begin
  534.                                       Take_them;
  535.                                       Comp2:= False;
  536.                                       end;
  537.                                 end;
  538.  
  539.                         end;
  540.               if (Points_available >= Needed) and
  541.                              (Score[Current_player].On_board)
  542.                    then
  543.                       case Count of
  544.                            1: begin
  545.                               Take_them;
  546.                               Comp2:= False;
  547.                               end;
  548.                            2: case Num_of_scores of
  549.                                    1: begin
  550.                                       Take_them;
  551.                                       Comp2:= True;
  552.                                       end;
  553.                                    2: begin
  554.                                       Take_them;
  555.                                       Comp2:= False;
  556.                                       end;
  557.                                 end;
  558.                            3: case Num_of_scores of
  559.                                    1: begin
  560.                                       Take_them;
  561.                                       Comp2:= True;
  562.                                       end;
  563.                                    2: begin
  564.                                       Take_them;
  565.                                       Comp2:= True;
  566.                                       end;
  567.                                    3: begin
  568.                                       Take_them;
  569.                                       Comp2:= False;
  570.                                       end;
  571.                                 end;
  572.                            4: case Num_of_scores of
  573.                                    1: begin
  574.                                       Take_them;
  575.                                       Comp2:= False;
  576.                                       end;
  577.                                  2,3: begin
  578.                                       Take_them;
  579.                                       Comp2:= True;
  580.                                       end;
  581.                                    4: begin
  582.                                       Take_them;
  583.                                       Comp2:= False;
  584.                                       end;
  585.                                 end;
  586.                            5: case Num_of_scores of
  587.                                    1: begin
  588.                                       Take_them;
  589.                                       Comp2:= false;
  590.                                       end;
  591.                                    2: begin
  592.                                       Take_them;
  593.                                       Comp2:= false;
  594.                                       end;
  595.                                  3,4: begin
  596.                                       Take_them;
  597.                                       Comp2:= True;
  598.                                       end;
  599.                                    5: begin
  600.                                       Take_them;
  601.                                       Comp2:= False;
  602.                                       end;
  603.                                 end;
  604.                            6: case Num_of_scores of
  605.                                    1: begin
  606.                                       Take_them;
  607.                                       Comp2:= false;
  608.                                       end;
  609.                                  2,3: begin
  610.                                       Take_them;
  611.                                       Comp2:= False;
  612.                                       end;
  613.                                  4,5: begin
  614.                                       Take_them;
  615.                                       Comp2:= True;
  616.                                       end;
  617.                                    6: begin
  618.                                       Take_them;
  619.                                       Comp2:= False;
  620.                                       end;
  621.                                 end;
  622.  
  623.                         end;
  624.               Now_available:= Pulled_score + Points_available +
  625.                                   Score[Current_player].Points;
  626.               if (Now_available > 5000.0) and
  627.                  (Now_available - Score[Current_player].Points > Needed)
  628.                    then
  629.                       begin
  630.                       Closest:= 0.0;
  631.                       for I:= 1 to Number_of_players do
  632.                            if I <> Current_player
  633.                                 then
  634.                                    if Score[I].Points > Closest
  635.                                         then
  636.                                            Closest:= Closest + Score[I].Points;
  637.                       if abs(Now_available - Closest) < 750
  638.                            then
  639.                               begin
  640.                               Count:= 0;
  641.                               for I:= 1 to 6 do
  642.                                    begin
  643.                                    Cup[I].Marked:= False;
  644.                                    Cup[I].Pulled:= False;
  645.                                    if not Cup[I].Saved
  646.                                         then
  647.                                            Count:= Count + 1;
  648.                                    end;
  649.                               case Count of
  650.                                    1: begin
  651.                                       Take_them;
  652.                                       Comp2:= False;
  653.                                       end;
  654.                                    2: case Num_of_scores of
  655.                                            1: begin
  656.                                               Take_them;
  657.                                               Comp2:= True;
  658.                                               end;
  659.                                            2: begin
  660.                                               Take_them;
  661.                                               Comp2:= False;
  662.                                               end;
  663.                                         end;
  664.                                    3: case Num_of_scores of
  665.                                            1: begin
  666.                                               Take_them;
  667.                                               Comp2:= True;
  668.                                               end;
  669.                                            2: begin
  670.                                               Take_them;
  671.                                               Comp2:= True;
  672.                                               end;
  673.                                            3: begin
  674.                                               Take_them;
  675.                                               Comp2:= False;
  676.                                               end;
  677.                                         end;
  678.                                    4: case Num_of_scores of
  679.                                            1: begin
  680.                                               Take_them;
  681.                                               Comp2:= True;
  682.                                               end;
  683.                                          2,3: begin
  684.                                               Take_them;
  685.                                               Comp2:= True;
  686.                                               end;
  687.                                            4: begin
  688.                                               Take_them;
  689.                                               Comp2:= False;
  690.                                               end;
  691.                                         end;
  692.                                    5: case Num_of_scores of
  693.                                            1: begin
  694.                                               Take_them;
  695.                                               Comp2:= false;
  696.                                               end;
  697.                                            2: begin
  698.                                               Take_them;
  699.                                               Comp2:= True;
  700.                                               end;
  701.                                          3,4: begin
  702.                                               Take_them;
  703.                                               Comp2:= True;
  704.                                               end;
  705.                                            5: begin
  706.                                               Take_them;
  707.                                               Comp2:= False;
  708.                                               end;
  709.                                         end;
  710.                                    6: case Num_of_scores of
  711.                                            1: begin
  712.                                            Take_them;
  713.                                            Comp2:= false;
  714.                                            end;
  715.                                         2: begin
  716.                                            Take_them;
  717.                                            Comp2:= True;
  718.                                            end;
  719.                                     3,4,5: begin
  720.                                            Take_them;
  721.                                            Comp2:= True;
  722.                                            end;
  723.                                         6: begin
  724.                                            Take_them;
  725.                                            Comp2:= False;
  726.                                            end;
  727.                                         end;
  728.                                  end;
  729.                               end;
  730.                       end;
  731.               end;
  732.  
  733.          function Comp3(Var Cup: Dice): boolean;
  734.  
  735.               Var Closest:        real;
  736.                   Now_available:  real;
  737.  
  738.               begin
  739.               Pulled_score:= 0.0;
  740.               if Points_available < Needed
  741.                    then
  742.                       begin
  743.                       if Potential_score[three_of_a_kind].Points >= 300.0
  744.                            then
  745.                               begin
  746.                               Pulled_score:= Pulled_score +
  747.                                        Potential_score[three_of_a_kind].Points;
  748.                               for I:= 1 to 6 do
  749.                                    Cup[I].Pulled:=
  750.                                         Potential_score
  751.                                              [three_of_a_kind].Dice_used[I];
  752.                               end
  753.                            else
  754.                               if (Potential_score[aces].Points < 100.0) and
  755.                                  (Potential_score[fives].Points < 50.0) and
  756.                                  (Potential_score[three_of_a_kind].Points > 0)
  757.                                    then
  758.                                       begin
  759.                                       Pulled_score:= Pulled_score +
  760.                                        Potential_score[three_of_a_kind].Points;
  761.                                       for I:= 1 to 6 do
  762.                                            Cup[I].Pulled:=
  763.                                                 Potential_score
  764.                                                 [three_of_a_kind].Dice_used[I];
  765.                                       end
  766.                                    else
  767.                                       if Potential_score[aces].Points >= 100.0
  768.                                            then
  769.                                               Take_aces(1)
  770.                                            else
  771.                                               Take_fives(1);
  772.                       if Num_of_scores = Count
  773.                            then
  774.                               begin
  775.                               Take_them;
  776.                               Comp3:= False;
  777.                               end;
  778.                       Comp3:= False;
  779.                       if Problems then Display_diagnostics(Pulled_score);
  780.                       if (Pulled_score + Points_available >= Needed) and
  781.                          (not Score[Current_player].On_board) and not
  782.                          (Num_of_scores = Count)
  783.                            then
  784.                               begin
  785.                               Take_them;
  786.                               Comp3:= True;
  787.                               end;
  788.                       Count:= 6;
  789.                       for I:= 1 to 6 do
  790.                            if (Cup[I].Saved) or (Cup[I].Pulled)
  791.                                 then
  792.                                    Count:= Count - 1;
  793.                       if (Pulled_score + Points_available >= Needed) and
  794.                          (Score[Current_player].On_board) and (Count <= 2)
  795.                          and not (Count = 0)
  796.                            then
  797.                               begin
  798.                               Take_them;
  799.                               Comp3:= True;
  800.                               end;
  801.                       end;
  802.  
  803.               if (Points_available >= Needed) and
  804.                              (not Score[Current_player].On_board)
  805.                    then
  806.                       case Count of
  807.                            1: begin
  808.                               Take_them;
  809.                               Comp3:= False;
  810.                               end;
  811.                            2: case Num_of_scores of
  812.                                    1: begin
  813.                                       Take_them;
  814.                                       Comp3:= True;
  815.                                       end;
  816.                                    2: begin
  817.                                       Take_them;
  818.                                       Comp3:= False;
  819.                                       end;
  820.                                 end;
  821.                            3: case Num_of_scores of
  822.                                    1: begin
  823.                                       Take_them;
  824.                                       Comp3:= True;
  825.                                       end;
  826.                                    2: begin
  827.                                       Take_them;
  828.                                       Comp3:= True;
  829.                                       end;
  830.                                    3: begin
  831.                                       Take_them;
  832.                                       Comp3:= False;
  833.                                       end;
  834.                                 end;
  835.                            4: case Num_of_scores of
  836.                                    1: begin
  837.                                       Take_them;
  838.                                       Comp3:= True;
  839.                                       end;
  840.                                  2,3: begin
  841.                                       Take_them;
  842.                                       Comp3:= True;
  843.                                       end;
  844.                                    4: begin
  845.                                       Take_them;
  846.                                       Comp3:= False;
  847.                                       end;
  848.                                 end;
  849.                            5: case Num_of_scores of
  850.                                    1: begin
  851.                                       Take_them;
  852.                                       Comp3:= false;
  853.                                       end;
  854.                                    2: begin
  855.                                       Take_them;
  856.                                       Comp3:= True;
  857.                                       end;
  858.                                  3,4: begin
  859.                                       Take_them;
  860.                                       Comp3:= True;
  861.                                       end;
  862.                                    5: begin
  863.                                       Take_them;
  864.                                       Comp3:= False;
  865.                                       end;
  866.                                 end;
  867.                            6: case Num_of_scores of
  868.                                    1: begin
  869.                                       Take_them;
  870.                                       Comp3:= false;
  871.                                       end;
  872.                                    2: begin
  873.                                       Take_them;
  874.                                       Comp3:= True;
  875.                                       end;
  876.                                3,4,5: begin
  877.                                       Take_them;
  878.                                       Comp3:= True;
  879.                                       end;
  880.                                    6: begin
  881.                                       Take_them;
  882.                                       Comp3:= False;
  883.                                       end;
  884.                                 end;
  885.  
  886.                         end;
  887.               if (Points_available >= Needed) and
  888.                              (Score[Current_player].On_board)
  889.                    then
  890.                       case Count of
  891.                            1: begin
  892.                               Take_them;
  893.                               Comp3:= False;
  894.                               end;
  895.                            2: case Num_of_scores of
  896.                                    1: begin
  897.                                       Take_them;
  898.                                       Comp3:= True;
  899.                                       end;
  900.                                    2: begin
  901.                                       Take_them;
  902.                                       Comp3:= False;
  903.                                       end;
  904.                                 end;
  905.                            3: case Num_of_scores of
  906.                                    1: begin
  907.                                       Take_them;
  908.                                       Comp3:= True;
  909.                                       end;
  910.                                    2: begin
  911.                                       Take_them;
  912.                                       Comp3:= True;
  913.                                       end;
  914.                                    3: begin
  915.                                       Take_them;
  916.                                       Comp3:= False;
  917.                                       end;
  918.                                 end;
  919.                            4: case Num_of_scores of
  920.                                    1: begin
  921.                                       Take_them;
  922.                                       Comp3:= False;
  923.                                       end;
  924.                                  2,3: begin
  925.                                       Take_them;
  926.                                       Comp3:= True;
  927.                                       end;
  928.                                    4: begin
  929.                                       Take_them;
  930.                                       Comp3:= False;
  931.                                       end;
  932.                                 end;
  933.                            5: case Num_of_scores of
  934.                                    1: begin
  935.                                       Take_them;
  936.                                       Comp3:= false;
  937.                                       end;
  938.                                    2: begin
  939.                                       Take_them;
  940.                                       Comp3:= false;
  941.                                       end;
  942.                                  3,4: begin
  943.                                       Take_them;
  944.                                       Comp3:= True;
  945.                                       end;
  946.                                    5: begin
  947.                                       Take_them;
  948.                                       Comp3:= False;
  949.                                       end;
  950.                                 end;
  951.                            6: case Num_of_scores of
  952.                                    1: begin
  953.                                       Take_them;
  954.                                       Comp3:= false;
  955.                                       end;
  956.                                  2,3: begin
  957.                                       Take_them;
  958.                                       Comp3:= False;
  959.                                       end;
  960.                                  4,5: begin
  961.                                       Take_them;
  962.                                       Comp3:= True;
  963.                                       end;
  964.                                    6: begin
  965.                                       Take_them;
  966.                                       Comp3:= False;
  967.                                       end;
  968.                                 end;
  969.  
  970.                         end;
  971.               Now_available:= Pulled_score + Points_available +
  972.                                   Score[Current_player].Points;
  973.               if ((Now_available > 5000.0) or (Score[0].Points >= 5000)) and
  974.                  (Now_available - Score[Current_player].Points > Needed)
  975.                    then
  976.                       begin
  977.                       Closest:= 0.0;
  978.                       for I:= 1 to Number_of_players do
  979.                            if I <> Current_player
  980.                                 then
  981.                                    if Score[I].Points > Closest
  982.                                         then
  983.                                            Closest:= Score[I].Points;
  984.                       if (abs(Now_available - Closest) < 750) or
  985.                          ((Now_available < Score[0].Points) and
  986.                                           (Score[0].Points >= 5000))
  987.                            then
  988.                               begin
  989.                               Count:= 0;
  990.                               for I:= 1 to 6 do
  991.                                    begin
  992.                                    Cup[I].Marked:= False;
  993.                                    Cup[I].Pulled:= False;
  994.                                    if not Cup[I].Saved
  995.                                         then
  996.                                            Count:= Count + 1;
  997.                                    end;
  998.                               case Count of
  999.                                    1: begin
  1000.                                       Take_them;
  1001.                                       Comp3:= False;
  1002.                                       end;
  1003.                                    2: case Num_of_scores of
  1004.                                            1: begin
  1005.                                               Take_them;
  1006.                                               Comp3:= True;
  1007.                                               end;
  1008.                                            2: begin
  1009.                                               Take_them;
  1010.                                               Comp3:= False;
  1011.                                               end;
  1012.                                         end;
  1013.                                    3: case Num_of_scores of
  1014.                                            1: begin
  1015.                                               Take_them;
  1016.                                               Comp3:= False;
  1017.                                               end;
  1018.                                            2: begin
  1019.                                               Take_them;
  1020.                                               Comp3:= True;
  1021.                                               end;
  1022.                                            3: begin
  1023.                                               Take_them;
  1024.                                               Comp3:= False;
  1025.                                               end;
  1026.                                         end;
  1027.                                    4: case Num_of_scores of
  1028.                                          1,2: begin
  1029.                                               Take_them;
  1030.                                               Comp3:= False;
  1031.                                               end;
  1032.                                            3: begin
  1033.                                               Take_them;
  1034.                                               Comp3:= True;
  1035.                                               end;
  1036.                                            4: begin
  1037.                                               Take_them;
  1038.                                               Comp3:= False;
  1039.                                               end;
  1040.                                         end;
  1041.                                    5: case Num_of_scores of
  1042.                                            1: begin
  1043.                                               Take_them;
  1044.                                               Comp3:= false;
  1045.                                               end;
  1046.                                          3,2: begin
  1047.                                               Take_them;
  1048.                                               Comp3:= False;
  1049.                                               end;
  1050.                                            4: begin
  1051.                                               Take_them;
  1052.                                               Comp3:= True;
  1053.                                               end;
  1054.                                            5: begin
  1055.                                               Take_them;
  1056.                                               Comp3:= False;
  1057.                                               end;
  1058.                                         end;
  1059.                                    6: case Num_of_scores of
  1060.                                         1: begin
  1061.                                            Take_them;
  1062.                                            Comp3:= false;
  1063.                                            end;
  1064.                                     3,4,2: begin
  1065.                                            Take_them;
  1066.                                            Comp3:= False;
  1067.                                            end;
  1068.                                         5: begin
  1069.                                            Take_them;
  1070.                                            Comp3:= True;
  1071.                                            end;
  1072.                                         6: begin
  1073.                                            Take_them;
  1074.                                            Comp3:= False;
  1075.                                            end;
  1076.                                         end;
  1077.                                  end;
  1078.                               end;
  1079.                       end;
  1080.               end;
  1081.  
  1082.  
  1083.          begin
  1084.          Count:= 0;
  1085.          Num_of_scores:= 0;
  1086.          for I:= 1 to 6 do
  1087.               Dice_that_score[I]:= False;
  1088.          All_used:= True;
  1089.          Cup:= New_Cup;
  1090.          fillchar(Talley,Sizeof(Talley),0);
  1091.          fillchar(Number,sizeof(Number),0);
  1092.          for Kind:= straight to fives do
  1093.               with Potential_score[Kind] do
  1094.                    begin
  1095.                    Points:= 0.0;
  1096.                    for I:= 1 to 6 do
  1097.                         Dice_used[I]:= False;
  1098.                    end;
  1099.          for I:= 1 to 6 do
  1100.               begin
  1101.               if not Cup[I].saved
  1102.                    then
  1103.                       begin
  1104.                       Count:= Count + 1;
  1105.                       Talley[Cup[I].Value]:= Talley[Cup[I].Value] + 1;
  1106.                       Cup[I].Marked:= False;
  1107.                       Cup[I].Pulled:= False;
  1108.                       end;
  1109.               Dice_that_score[I]:= False;
  1110.               end;
  1111.          if Count >0
  1112.               then
  1113.                  begin
  1114.                  fillchar(Number,sizeof(Number),0);
  1115.                  for I:= 1 to 6 do
  1116.                       Case Talley[I] of
  1117.                            1: Number[1]:= Number[1] + 1;
  1118.                            2: Number[2]:= Number[2] + 1;
  1119.                            3: Number[3]:= Number[3] + 1;
  1120.                            4: Number[3]:= Number[3] + 1;
  1121.                            5: Number[3]:= Number[3] + 1;
  1122.                            6: Number[3]:= Number[3] + 2;
  1123.                         end;
  1124.                  if Number[1] = 6
  1125.                       then
  1126.                          with Potential_score[straight] do
  1127.                               begin
  1128.                               Points:= 1500;
  1129.                               for I:= 1 to 6 do
  1130.                                    begin
  1131.                                    Dice_used[I]:= True;
  1132.                                    Cup[I].Marked:= True;
  1133.                                    end;
  1134.                               end;
  1135.                  if Number[2] = 3
  1136.                       then
  1137.                          with Potential_score[three_pairs] do
  1138.                               begin
  1139.                               Points:= 500;
  1140.                               for I:= 1 to 6 do
  1141.                                    begin
  1142.                                    Dice_used[I]:= True;
  1143.                                    Cup[I].Marked:= True;
  1144.                                    end;
  1145.                               end;
  1146.                  if Number[3] > 0
  1147.                       then
  1148.                          with Potential_score[three_of_a_kind] do
  1149.                               begin
  1150.                               Number[3]:= Number[3] - 1;
  1151.                               I:= 1;
  1152.                               while (Talley[I] <3) do
  1153.                                    I:= I + 1;
  1154.                               Count:= 0;
  1155.                               for J:= 1 to 6 do
  1156.                                    if (Cup[J].Value = I) and
  1157.                                                  (not Cup[J].Saved) and
  1158.                                                       (Count < 3)
  1159.                                         then
  1160.                                            begin
  1161.                                            Dice_used[J]:= True;
  1162.                                            Cup[J].Marked:= True;
  1163.                                            Count:= Count + 1;
  1164.                                            end;
  1165.                               Points:= 100 * I;
  1166.                               if I = 1
  1167.                                    then
  1168.                                       Points:= 1000.0;
  1169.                               end;
  1170.                  if Number[3] = 1
  1171.                       then
  1172.                          with Potential_score[second_three] do
  1173.                               begin
  1174.                               Number[3]:= Number[3] - 1;
  1175.                               I:= 1;
  1176.                               while (Talley[I] <> 3) and (Talley[I] <> 6) do
  1177.                                    I:= I + 1;
  1178.                               Count:= 0;
  1179.                               for J:= 1 to 6 do
  1180.                                    if (Cup[J].Value = I) and
  1181.                                                  (not Cup[J].Marked) and
  1182.                                                       (Count < 3)
  1183.                                         then
  1184.                                            begin
  1185.                                            Dice_used[J]:= True;
  1186.                                            Cup[J].Marked:= True;
  1187.                                            Count:= Count + 1;
  1188.                                            end;
  1189.                               Points:= 100 * I;
  1190.                               if I = 1
  1191.                                    then
  1192.                                       Points:= 1000.0;
  1193.                               end;
  1194.                  for I:= 1 to 6 do
  1195.                       begin
  1196.                       if (Cup[I].Value = 1) {and (not Cup[I].Marked)} and
  1197.                                                 (not Cup[I].Saved)
  1198.                            then
  1199.                               begin
  1200.                               Potential_score[aces].Points:=
  1201.                                    Potential_score[aces].Points + 100;
  1202.                               Potential_score[aces].Dice_used[I]:= True;
  1203.                               Cup[I].Marked:= True;
  1204.                               end;
  1205.                       if (Cup[I].Value = 5) {and (not Cup[I].Marked) }and
  1206.                                                 (not Cup[I].Saved)
  1207.                            then
  1208.                               begin
  1209.                               Potential_score[fives].Points:=
  1210.                                    Potential_score[fives].Points + 50;
  1211.                               Potential_score[fives].Dice_used[I]:= True;
  1212.                               Cup[I].Marked:= True;
  1213.                               end;
  1214.                       end;
  1215.                  end;
  1216.          Count:= 0;
  1217.          for I:= 1 to 6 do
  1218.               begin
  1219.               All_used:= All_used and (Cup[I].Marked or Cup[I].Pulled);
  1220.               if not Cup[I].Saved
  1221.                    then
  1222.                       Count:= Count + 1;
  1223.               end;
  1224.          for Kind:= straight to fives do
  1225.               for I:= 1 to 6 do
  1226.                    Dice_that_score[I]:= Dice_that_score[I] or
  1227.                                        Potential_score[Kind].Dice_used[I];
  1228.          for I:= 1 to 6 do
  1229.               if Dice_that_score[I]
  1230.                    then
  1231.                       Num_of_scores:= Num_of_scores + 1;
  1232.          case Score[Current_player].Player_type of
  1233.               Comp_1: Computer_player:= Comp1;
  1234.               Comp_2: Computer_player:= Comp2(Cup);
  1235.               Comp_3: Computer_player:= Comp3(Cup);
  1236.            end;
  1237.          for I:= 1 to 6 do
  1238.               Cup[I].Marked:= False;
  1239.          New_Cup:= Cup;
  1240.          end;